package br.com.sistemaGabinete.Controle;

import java.util.Properties;

import javax.mail.Address;
import javax.mail.Authenticator;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

public class JavaMailAppBO {

	
	public static void main(String[] args) {
		JavaMailAppBO j = new JavaMailAppBO();
		
		j.sendMail("josivam.ro@gmail.com", "josivam.ro@gmail.com", "titulo", "descricao");
	}
	
	
	
	  private String mailSMTPServer;  
	    private String mailSMTPServerPort;  
	      
	    /* 
	     * quando instanciar um Objeto ja sera atribuido o servidor SMTP do GMAIL  
	     * e a porta usada por ele 
	     */  
	    JavaMailAppBO() { //Para o GMAIL   
	        mailSMTPServer = "smtp.gmail.com";  
	        mailSMTPServerPort = "465";  
	    }  
	    /* 
	     * caso queira mudar o servidor e a porta, so enviar para o contrutor 
	     * os valor como string 
	     */  
	    JavaMailAppBO(String mailSMTPServer, String mailSMTPServerPort) { //Para outro Servidor  
	        this.mailSMTPServer = mailSMTPServer;  
	        this.mailSMTPServerPort = mailSMTPServerPort;  
	    }  
	      
	    public void sendMail(String from, String to, String subject, String message) {  
	          
	        Properties props = new Properties();  
	  
	                // quem estiver utilizando um SERVIDOR PROXY descomente essa parte e atribua as propriedades do SERVIDOR PROXY utilizado  
	                /* 
	                props.setProperty("proxySet","true"); 
	                props.setProperty("socksProxyHost","192.168.155.1"); // IP do Servidor Proxy 
	                props.setProperty("socksProxyPort","1080");  // Porta do servidor Proxy 
	                */  
	  
	        props.put("mail.transport.protocol", "smtp"); //define protocolo de envio como SMTP  
	        props.put("mail.smtp.starttls.enable","true");   
	        props.put("mail.smtp.host", mailSMTPServer); //server SMTP do GMAIL  
	        props.put("mail.smtp.auth", "true"); //ativa autenticacao  
	        props.put("mail.smtp.user", from); //usuario ou seja, a conta que esta enviando o email (tem que ser do GMAIL)  
	        props.put("mail.debug", "true");  
	        props.put("mail.smtp.port", mailSMTPServerPort); //porta  
	        props.put("mail.smtp.socketFactory.port", mailSMTPServerPort); //mesma porta para o socket  
	        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");  
	        props.put("mail.smtp.socketFactory.fallback", "false");  
	          
	        //Cria um autenticador que sera usado a seguir  
	        SimpleAuth auth = null;  
	        auth = new SimpleAuth ("seuusuarioparalogin","suasenhaparalogin");  
	          
	        //Session - objeto que ira realizar a conexão com o servidor  
	        /*Como há necessidade de autenticação é criada uma autenticacao que 
	         * é responsavel por solicitar e retornar o usuário e senha para  
	         * autenticação */  
	        Session session = Session.getDefaultInstance(props, auth);  
	        session.setDebug(true); //Habilita o LOG das ações executadas durante o envio do email  
	  
	        //Objeto que contém a mensagem  
	        Message msg = new MimeMessage(session);  
	  
	        try {  
	            //Setando o destinatário  
	            msg.setRecipient(Message.RecipientType.TO, new InternetAddress(to));  
	            //Setando a origem do email  
	            msg.setFrom(new InternetAddress(from));  
	            //Setando o assunto  
	            msg.setSubject(subject);  
	            //Setando o conteúdo/corpo do email  
	            msg.setContent(message,"text/plain");  
	  
	        } catch (Exception e) {  
	            System.out.println(">> Erro: Completar Mensagem");  
	            e.printStackTrace();  
	        }  
	          
	        //Objeto encarregado de enviar os dados para o email  
	        Transport tr;  
	        try {  
	            tr = session.getTransport("smtp"); //define smtp para transporte  
	            /* 
	             *  1 - define o servidor smtp 
	             *  2 - seu nome de usuario do gmail 
	             *  3 - sua senha do gmail 
	             */  
	            tr.connect(mailSMTPServer, "seuusuarioparalogin", "suasenhaparalogin");  
	            msg.saveChanges(); // don't forget this  
	            //envio da mensagem  
	            tr.sendMessage(msg, msg.getAllRecipients());  
	            tr.close();  
	        } catch (Exception e) {  
	            // TODO Auto-generated catch block  
	            System.out.println(">> Erro: Envio Mensagem");  
	            e.printStackTrace();  
	        }  
	  
	    }  
	}  
	  
	//clase que retorna uma autenticacao para ser enviada e verificada pelo servidor smtp  
	class SimpleAuth extends Authenticator {  
	    public String username = null;  
	    public String password = null;  
	  
	  
	    public SimpleAuth(String user, String pwd) {  
	        username = user;  
	        password = pwd;  
	    }  
	  
	    protected PasswordAuthentication getPasswordAuthentication() {  
	        return new PasswordAuthentication (username,password);  
	    }  
	}   
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	
	   /*   public static void main(String[] args) {
	            Properties props = new Properties();
	            *//** Parâmetros de conexão com servidor Gmail *//*
	            props.put("mail.smtp.host", "smtp.gmail.com");
	            props.put("mail.smtp.socketFactory.port", "465");
	            props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
	            props.put("mail.smtp.auth", "true");
	            props.put("mail.smtp.port", "465""587");

	            
	            final String seuEmail = "josivam.ro@gmail.com";
	            final String senha = "josivamro";
	            
	            Session session = Session.getDefaultInstance(props,
	                        new javax.mail.Authenticator() {
	                             protected PasswordAuthentication getPasswordAuthentication() 
	                             {
	                                   return new PasswordAuthentication("seuemail@gmail.com"seuEmail, "suasenha123"senha);
	                             }
	                        });

	            *//** Ativa Debug para sessão *//*
	            session.setDebug(true);

	            try {

	                  Message message = new MimeMessage(session);
	                  message.setFrom(new InternetAddress("seuemail@gmail.com"seuEmail)); //Remetente

	                  Address[] toUser = InternetAddress //Destinatário(s)
	                             .parse("seuamigo@gmail.com, seucolega@hotmail.com, seuparente@yahoo.com.br"seuEmail);  

	                  message.setRecipients(Message.RecipientType.TO, toUser);
	                  message.setSubject("Enviando email com JavaMail");//Assunto
	                  message.setText("Enviei este email utilizando JavaMail com minha conta GMail!");
	                  *//**Método para enviar a mensagem criada*//*
	                  Transport.send(message);

	                  System.out.println("Feito!!!");

	             } catch (MessagingException e) {
	                  throw new RuntimeException(e);
	            }
	      }

*/
